<HTML
><HEAD
><TITLE
>Partitions</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.63
"><LINK
REL="HOME"
TITLE="The Linux System Administrator's Guide"
HREF="index.html"><LINK
REL="UP"
TITLE="Using Disks and Other Storage Media"
HREF="c955.html"><LINK
REL="PREVIOUS"
TITLE="Formatting"
HREF="x1079.html"><LINK
REL="NEXT"
TITLE="Filesystems"
HREF="x1298.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>The Linux System Administrator's Guide: Version 0.7</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="x1079.html"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>Chapter 6. Using Disks and Other Storage Media</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x1298.html"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="AEN1139"
>6.7. Partitions</A
></H1
><P
>A hard disk can be divided into several
	<I
CLASS="GLOSSTERM"
>partitions</I
>.  Each partition functions as if
	it were a separate hard disk.  The idea is that if you have one hard
	disk, and want to have, say, two operating systems on it, you can
	divide the disk into two partitions.  Each operating system uses its
	partition as it wishes and doesn't touch the other ones.  This way
	the two operating systems can co-exist peacefully on the same hard
	disk. Without partitions one would have to buy a hard disk for each 
	operating system.</P
><P
>Floppies are not usually partitioned.  There is no technical reason
	against this, but since they're so small, partitions would be useful
	only very rarely.  CD-ROMs are usually also not partitioned, since
	it's easier to use them as one big disk, and there is seldom a need
	to have several operating systems on one.</P
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN1144"
>6.7.1. The MBR, boot sectors and partition table</A
></H2
><P
>The information about how a hard disk has been partitioned
	is stored in its first sector (that is, the first sector of the
	first track on the first disk surface).  The first sector is the
	<I
CLASS="GLOSSTERM"
>master boot record</I
> (MBR) of the disk; this is
	the sector that the BIOS reads in and starts when the machine is
	first booted.  The master boot record contains a small program that
	reads the partition table, checks which partition is active (that
	is, marked bootable), and reads the first sector of that partition,
	the partition's <I
CLASS="GLOSSTERM"
>boot sector</I
> (the MBR is also
	a boot sector, but it has a special status and therefore a special
	name).  This boot sector contains another small program that reads
	the first part of the operating system stored on that partition
	(assuming it is bootable), and then starts it.</P
><P
>The partitioning scheme is not built into the hardware, or
	even into the BIOS.  It is only a convention that many operating
	systems follow.  Not all operating systems do follow it, but they
	are the exceptions.  Some operating systems support partitions, but
	they occupy one partition on the hard disk, and use their internal
	partitioning method within that partition.  The latter type exists
	peacefully with other operating systems (including Linux), and does
	not require any special measures, but an operating system that
	doesn't support partitions cannot co-exist on the same disk with any 
	other operating system.</P
><P
>As a safety precaution, it is a good idea to write down the
	partition table on a piece of paper, so that if it ever corrupts you
	don't have to lose all your files.  (A bad partition table can be
	fixed with <B
CLASS="COMMAND"
>fdisk</B
>).  The relevant information is
	given by the <B
CLASS="COMMAND"
>fdisk -l</B
> command:

        <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>	<TT
CLASS="PROMPT"
>$</TT
> <TT
CLASS="USERINPUT"
><B
>fdisk -l /dev/hda</B
></TT
>
	<TT
CLASS="COMPUTEROUTPUT"
></TT
>
	<TT
CLASS="COMPUTEROUTPUT"
>Disk /dev/hda: 15 heads, 57 sectors, 790 cylinders</TT
>
	<TT
CLASS="COMPUTEROUTPUT"
>Units = cylinders of 855 * 512 bytes</TT
>
	<TT
CLASS="COMPUTEROUTPUT"
></TT
>
	<TT
CLASS="COMPUTEROUTPUT"
>   Device Boot  Begin   Start     End  Blocks   Id  System</TT
>
	<TT
CLASS="COMPUTEROUTPUT"
>/dev/hda1           1       1      24   10231+  82  Linux swap</TT
>
	<TT
CLASS="COMPUTEROUTPUT"
>/dev/hda2          25      25      48   10260   83  Linux native</TT
>
	<TT
CLASS="COMPUTEROUTPUT"
>/dev/hda3          49      49     408  153900   83  Linux native</TT
>
	<TT
CLASS="COMPUTEROUTPUT"
>/dev/hda4         409     409     790  163305    5  Extended</TT
>
	<TT
CLASS="COMPUTEROUTPUT"
>/dev/hda5         409     409     744  143611+  83  Linux native</TT
>
	<TT
CLASS="COMPUTEROUTPUT"
>/dev/hda6         745     745     790   19636+  83  Linux native</TT
>
	<TT
CLASS="PROMPT"
>$</TT
>
	</PRE
></FONT
></TD
></TR
></TABLE
>&#13;</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN1168"
>6.7.2. Extended and logical partitions</A
></H2
><P
>The original partitioning scheme for PC hard disks allowed
	only four partitions.  This quickly turned out to be too little in
	real life, partly because some people want more than four operating
	systems (Linux, MS-DOS, OS/2, Minix, FreeBSD, NetBSD, or Windows/NT,
	to name a few), but primarily because sometimes it is a good idea to
	have several partitions for one operating system.  For example, swap
	space is usually best put in its own partition for Linux instead of
	in the main Linux partition for reasons of speed (see below).</P
><P
>To overcome this design problem, <I
CLASS="GLOSSTERM"
>extended 
	partitions</I
> were invented.  This trick allows
	partitioning a <I
CLASS="GLOSSTERM"
>primary partition</I
> into
	sub-partitions.  The primary partition thus subdivided is the
	<I
CLASS="GLOSSTERM"
>extended partition</I
>; the sub-partitions are
	<I
CLASS="GLOSSTERM"
>logical partitions</I
>.  They behave like primary
	partitions, but are created differently.  There is no speed
	difference between them.</P
><P
>The partition structure of a hard disk might look like that
	in <A
HREF="x1139.html#HARD-DISK-LAYOUT"
>Figure 6-2</A
>.  The disk is divided into
	three primary partitions, the second of which is divided into two
	logical partitions.  Part of the disk is not partitioned at all.
	The disk as a whole and each primary partition has a boot sector.</P
><DIV
CLASS="FIGURE"
><A
NAME="HARD-DISK-LAYOUT"
></A
><P
><B
>Figure 6-2. A sample hard disk partitioning.</B
></P
><P
><IMG
SRC="hd-layout.gif"></P
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN1181"
>6.7.3. Partition types</A
></H2
><P
>The partition tables (the one in the MBR, and the ones for
	extended partitions) contain one byte per partition that identifies
	the type of that partition.  This attempts to identify the operating
	system that uses the partition, or what it uses it for.  The purpose
	is to make it possible to avoid having two operating systems
	accidentally using the same partition.  However, in reality,
	operating systems do not really care about the partition type byte;
	e.g., Linux doesn't care at all what it is.  Worse, some of them use
	it incorrectly; e.g., at least some versions of DR-DOS ignore the
	most significant bit of the byte, while others don't.</P
><P
>There is no standardisation agency to specify what each byte
	value means, but some commonly accepted ones are included in in
	<A
HREF="x1139.html#PARTITION-IDS"
>Table 6-1</A
>.  A more complete list is available
	in the Linux <B
CLASS="COMMAND"
>fdisk</B
> program.</P
><DIV
CLASS="TABLE"
><A
NAME="PARTITION-IDS"
></A
><P
><B
>Table 6-1. Partition types (from the Linux <B
CLASS="COMMAND"
>fdisk</B
> program).</B
></P
><TABLE
BORDER="1"
CLASS="CALSTABLE"
><TBODY
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>0</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Empty</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>40</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Venix 80286</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>94</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Amoeba BBT</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>1</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>DOS 12-bit FAT</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>51</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Novell?</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>a5</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>BSD/386</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>2</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>XENIX root</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>52</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Microport</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>b7</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>BSDI fs</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>3</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>XENIX usr</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>63</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>GNU HURD</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>b8</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>BSDI swap</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>4</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>DOS 16-bit FAT &#60;32M</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>64</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Novell</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>c7</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Syrinx</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>5</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Extended</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>75</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>PC/IX</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>db</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>CP/M</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>6</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>DOS 16-bit &#62;=32M</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>80</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Old MINIX</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>e1</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>DOS access</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>7</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>OS/2 HPFS</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>81</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Linux/MINIX</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>e3</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>DOS R/O</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>8</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>AIX</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>82</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Linux swap</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>f2</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>DOS secondary</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>9</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>AIX bootable</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>83</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Linux native</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>ff</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>BBT</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>a</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>OS/2 Boot Manager</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>93</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Amoeba</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
></TR
></TBODY
></TABLE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN1269"
>6.7.4. Partitioning a hard disk</A
></H2
><P
>There are many programs for creating and removing
	partitions.  Most operating systems have their own, and it can be a
	good idea to use each operating system's own, just in case it does
	something unusual that the others can't. Many of the programs are
	called <B
CLASS="COMMAND"
>fdisk</B
>, including the Linux one, or
	variations thereof.  Details on using the Linux
	<B
CLASS="COMMAND"
>fdisk</B
> are given on its man page.  The
	<B
CLASS="COMMAND"
>cfdisk</B
> command is similar to
	<B
CLASS="COMMAND"
>fdisk</B
>, but has a nicer (full screen) user 
	interface.</P
><P
>When using IDE disks, the boot partition (the partition
	with the bootable kernel image files) must be completely within the
	first 1024 cylinders.  This is because the disk is used via the BIOS
	during boot (before the system goes into protected mode), and BIOS
	can't handle more than 1024 cylinders. It is sometimes possible to
	use a boot partition that is only partly within the first 1024
	cylinders.  This works as long as all the files that are read with
	the BIOS are within the first 1024 cylinders.  Since this is
	difficult to arrange, it is <EM
>a very bad idea</EM
> to
	do it; you never know when a kernel update or disk defragmentation
	will result in an unbootable system.  Therefore, make sure your boot
	partition is completely within the first 1024 cylinders
		
		<A
NAME="AEN1278"
HREF="#FTN.AEN1278"
>[1]</A
>
	
	.</P
><P
>Some newer versions of the BIOS and IDE disks can, in fact,
	handle disks with more than 1024 cylinders.  If you have such a
	system, you can forget about the problem; if you aren't quite
	sure of it, put it within the first 1024 cylinders.</P
><P
>Each partition should have an even number of sectors,
	since the Linux filesystems use a 1 kilobyte block size, i.e., two
	sectors.  An odd number of sectors will result in the last sector
	being unused.  This won't result in any problems, but it is ugly,
	and some versions of <B
CLASS="COMMAND"
>fdisk</B
> will warn about it.</P
><P
>Changing a partition's size usually requires first backing up
	everything you want to save from that partition (preferably the
	whole disk, just in case), deleting the partition, creating new
	partition, then restoring everything to the new partition. If the
	partition is growing, you may need to adjust the sizes (and backup and 
	restore) of the adjoining partitions as well.</P
><P
>Since changing partition sizes is painful, it is preferable to
	get the partitions right the first time, or have an effective and
	easy to use backup system.  If you're installing from a media that
	does not require much human intervention (say, from CD-ROM, as
	opposed to floppies), it is often easy to play with different
	configuration at first. Since you don't already have data to back
	up, it is not so painful to modify partition sizes several times.</P
><P
>There is a program for MS-DOS, called
	<B
CLASS="COMMAND"
>fips</B
>
		
		<A
NAME="AEN1287"
HREF="#FTN.AEN1287"
>[2]</A
>
	
	, which resizes an MS-DOS partition without requiring the backup and
	restore, but for other filesystems it is still necessary.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN1293"
>6.7.5. Device files and partitions</A
></H2
><P
>Each partition and extended partition has its own
	device file.  The naming convention for these files is that a
	partition's number is appended after the name of the whole disk,
	with the convention that 1-4 are primary partitions (regardless of
	how many primary partitions there are) and number greater than 5 are
	logical partitions (regardless of within which primary partition
	they reside).  For example, <TT
CLASS="FILENAME"
>/dev/hda1</TT
> is the
	first primary partition on the first IDE hard disk, and
	<TT
CLASS="FILENAME"
>/dev/sdb7</TT
> is the third extended partition on
	the second SCSI hard disk.</P
></DIV
></DIV
><H3
CLASS="FOOTNOTES"
>Notes</H3
><TABLE
BORDER="0"
CLASS="FOOTNOTES"
WIDTH="100%"
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="5%"
><A
NAME="FTN.AEN1278"
HREF="x1139.html#AEN1278"
>[1]</A
></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="95%"
><P
>This may no longer be true with newer
		versions of LILO that support LBA (Logical Block
		Addressing).  Consult the documentation for your
		distribution to see if it has a version of LILO where
		LBA is supported.</P
></TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="5%"
><A
NAME="FTN.AEN1287"
HREF="x1139.html#AEN1287"
>[2]</A
></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="95%"
><P
>The <B
CLASS="COMMAND"
>fips</B
> program is
		included in most Linux distributions.  The commercial
		partition manager ``Partition Magic'' also has a similar
		facility but with a nicer interface.  Please do remember
		that partitioning is dangerous.  Make
		<EM
>sure</EM
> you have a recent backup of
		any important data before you try changing partition
		sizes ``on the fly''.  The GNU program
		<B
CLASS="COMMAND"
>parted</B
> can resize other types of
		partitions as well as MS-DOS, but sometimes in a limited
		manner.  Consult the <B
CLASS="COMMAND"
>parted</B
> documentation
		before using it, better safe than sorry.
		</P
></TD
></TR
></TABLE
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="x1079.html"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x1298.html"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Formatting</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="c955.html"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Filesystems</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>